package com.ywyself.service;

import java.util.List;

import com.ywyself.dao.UserDao;
import com.ywyself.ext.YsEncryption;
import com.ywyself.ext.kit.YsKit;
import com.ywyself.ext.utils.YsDateUtils;
import com.ywyself.ext.utils.YsStringUtils;
import com.ywyself.model.User;

public class UserService {
    private static final UserDao userDao = new UserDao();

    public static final UserService EXC = new UserService();

    /**
     * 用户账号密码认证
     * 
     * @param userName
     *            用户名
     * @param userPass
     *            用户密码
     * @return data:User
     */
    public YsKit doAuth(String userName, String userPass) {
        if (YsStringUtils.isBlank(userName)) {
            // 用户名为空
            return YsKit.fail().msg("请填写用户名").code("300");
        } else if (YsStringUtils.isBlank(userPass)) {
            // 密码为空
            return YsKit.fail().msg("请填写密码").code("300");
        } else {
            // 查找用户
            YsKit yr = this.getByUserName(userName);
            if (yr.isOk()) {
                /**
                 * 比较密码是否一致
                 */
                userPass = YsEncryption.encrypt(userPass);
                User u = yr.getData();
                if (YsStringUtils.isEqual(userPass, u.getUserPass())) {
                    // 认证成功
                    return YsKit.ok().msg("认证成功").code("100").data(u);
                } else {
                    // 认证失败
                    return YsKit.fail().msg("认证失败").code("400");
                }
            } else {
                // 用户不存在
                return YsKit.fail().msg("用户不存在").code("400");
            }
        }
    }

    /**
     * 基于用户id查找用户
     * 
     * @param uid
     *            用户id
     * @return
     */
    public YsKit getById(long uid) {
        return userDao.getById(uid);
    }

    /**
     * 根据用户名查找用户
     * 
     * @param userName
     *            用户名
     * @return admin对象或者null
     */
    public YsKit getByUserName(String userName) {
        if (YsStringUtils.isBlank(userName)) {
            return YsKit.fail().code("300").msg("用户名不能为空");
        } else {
            return userDao.getByUserName(userName);
        }
    }

    /**
     * 查询所有用户
     * 
     * @return
     */
    public List<User> listAll() {
        return userDao.listAll();
    }

    /**
     * 基于用户id修改用户名和用户密码
     * 
     * @param uid
     *            用户id
     * @param userName
     *            用户名
     * @param userPass
     *            密码（未经过加密，接收到的密码）
     * @return
     */
    public YsKit updateSecurity(long uid, String userName, String userPass) {
        if (YsStringUtils.isBlank(userName)) {
            // 用户名为空
            return YsKit.fail().code("300").msg("请输入用户名");
        } else if (YsStringUtils.isBlank(userPass)) {
            // 用户密码为空
            return YsKit.fail().code("300").msg("请输入用户密码");
        } else {
            userPass = YsEncryption.encrypt(userPass);
            YsKit ret = userDao.updateSecurity(uid, userName, userPass);
            if (ret.isOk()) {
                return YsKit.ok().code("101").msg("更新成功");
            } else {
                return ret;
            }
        }
    }

    /**
     * 更新用户的登录ip和登录时间
     * 
     * @param uid
     *            用户id
     * @param loginIp
     *            登录ip
     * @return
     */
    public YsKit updateLog(long uid, String loginIp) {
        return userDao.updateLog(uid, loginIp, YsDateUtils.getStr());
    }

    /**
     * 更新用户的基本信息
     * 
     * @param uid
     *            用户id
     * @param nickName
     *            用户昵称
     * @param icon
     *            用户头像
     * @param gender
     *            性别
     * @param email
     *            邮箱
     * @return
     */
    public YsKit updateInfo(long uid, String nickName, String icon, String gender, String email) {
        if (YsStringUtils.isBlank(nickName)) {
            // 用户名为空
            return YsKit.fail().code("300").msg("用户昵称不能为空");
        } else if (YsStringUtils.isBlank(gender)) {
            // 用户密码为空
            return YsKit.fail().code("300").msg("一定要有一个性别");
        } else {
            YsKit ret = userDao.updateInfo(uid, nickName, icon, gender, email);
            if (ret.isOk()) {
                return YsKit.ok().code("101").msg("更新成功");
            } else {
                return ret;
            }
        }
    }

}
